perm filename TALK.MID[S,NET] blob sn#697652 filedate 1983-01-28 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	NIORTS CORBEG ITSP NETOP PDL USRBUF HSTBUF SSOC RSOC SHAN RHAN COREND
C00003 00003	TALK CMDSCN GETCMD GETUSR GETHST SPCLUZ GETHCH
C00005 00004	GOGOGO
C00006 00005	LNKILP LNKIDN LNKMSG SNDPRG PRGSPC
C00007 00006	ZZZ MAINLP
C00009 00007	LOSER GETSC1 SC1DUN GTRHAN RHANDN GETSC2 SC2DUN GTSHAN SHANDN RHANLP RHALDN
C00011 00008	SHANLP SHALDN RHANL1 RHALD1 SHANL1 SHALD1 LNKIL1 LNKID1
C00013 00009	BBNSUX SNDRUB SNTRUB
C00014 00010	TXTSTR TXTOCH TXTSND TXTICH CMDSTR OCTOUT RESPON LOST GETMSG WAITGA
C00016 ENDMK
C⊗;
;NIORTS CORBEG ITSP NETOP PDL USRBUF HSTBUF SSOC RSOC SHAN RHAN COREND

TITLE TALK

; QUICK NETWORK TALK KLUDGE

NIORTS==-1 ? DATRTS==-1 ? ERRHAN==-1 ? HSTTAB==-1 ; MARVELOUS NETWORK ROUTINES
.INSRT NETWRK

CORBEG==.
ITSP:	BLOCK 1.
NETOP:	BLOCK 1.
PDL:	BLOCK 40.
USRBUF:	BLOCK 10.
HSTBUF:	BLOCK 10.
SSOC:	BLOCK 1
RSOC:	BLOCK 1.
SHAN:	BLOCK 5.
RHAN:	BLOCK 5.
COREND==.-1
;TALK CMDSCN GETCMD GETUSR GETHST SPCLUZ GETHCH

SUBTTL INITIALIZATION AND COMMAND PARSING

TALK:	JFCL
	RESET
	MOVE 17,[PDL(-40)]
	SETZM CORBEG
	MOVE [CORBEG,,CORBEG+1]
	BLT COREND
	MOVEI [DISMIS]			; SIMPLE INTERRUPT SERVER!
	MOVEM JOBAPR
	RESCAN 1
	JUMPE 1,GETCMD
	INCHRS
	 JRST GETCMD
	CAIE "T
	 CAIN "t
	  SKIPA 1,[" ]
	   MOVEI 1,";
CMDSCN:	INCHRS
	 JRST GETCMD
	CAIE ↑J
	 CAIN 175
	  JRST GETCMD
	CAIE (1)
	 JRST CMDSCN
	CAIA
GETCMD:	 OUTSTR [ASCIZ/To: /]

; GET USER NAME

	MOVE 1,[440700,,USRBUF]
GETUSR:	INCHWL
	CAIN ↑M
	 JRST GETUSR
	CAIE 175
	 CAIN ↑J
	  JRST [OUTSTR [ASCIZ/Missing host name./]
		JRST SPCLUZ]
	CAIE "%				; CRETIN SAIL CONVENTION
	 CAIN "@
	  JRST GETHST
	IDPB 1
	JRST GETUSR

; GET HOST NAME

GETHST:	MOVE 1,[440700,,HSTBUF]
	SKIPE USRBUF
	 JRST GETHCH
	OUTSTR [ASCIZ/Missing user name./]
SPCLUZ:	OUTSTR [ASCIZ/  You must say <user>@<host>.
/]
	CLRBFI
	JRST TALK

GETHCH:	INCHWL
	CAIE <" >
	 CAIN ↑M
	  JRST GETHCH
	CAIE 175
	 CAIN ↑J
	  JRST GOGOGO
	IDPB 1
	JRST GETHCH
;GOGOGO

SUBTTL FIRE UP A CONNECTION

GOGOGO:	PUSHJ 17,MAPHST
	MOVEI HSTBUF
	PUSHJ 17,HSTNAM
	 JRST [	OUTSTR [ASCIZ/No such host.
/]
		CLRBFI
		PUSHJ 17,UNMHST
		JRST TALK]
	 JRST [	OUTSTR [ASCIZ/Ambiguous host name.
/]
		CLRBFI
		PUSHJ 17,UNMHST
		JRST TALK]
	MOVEM HOST
	HLRZS 1
	MOVE (1)
	CAMN [ASCII/ITS/]			; ITSes have winning LINKI
	 SETOM ITSP
	PUSHJ 17,UNMHST
	MOVEI 365
	MOVEM ICPSKT
	PUSHJ 17,CONECT
	PTJOBX [0 ? 3]
	CLKINT 60.*2.
	MOVSI 020210
	INTENB
	JSP 1,CMDSTR
	 ASCIZ/ERSTR
/
	PUSHJ 17,NETSND
	PUSHJ 17,WAITGA
	SKIPN ITSP
	 JRST LOSER
; FALLS THROUGH
;LNKILP LNKIDN LNKMSG SNDPRG PRGSPC

SUBTTL LINK TO WINNERS

	JSP 1,CMDSTR
	 ASCIZ/LINKI /
	MOVE 1,[440700,,USRBUF]
LNKILP:	ILDB 1
	JUMPE LNKIDN
	PUSHJ 17,NETOCH
	JRST LNKILP
LNKIDN:	JSP 1,CMDSTR
	 ASCIZ/
/
	PUSHJ 17,NETSND
	PUSHJ 17,RESPON
	PUSHJ 17,WAITGA

; WINNER OR LOSER, WE EVENTUALLY END UP HERE

LNKMSG:	LOCK
	JSP 1,TXTSTR
	 ASCIZ/[Network link from /
	GETPPN 1,
	 JFCL
	LSH 1,18.
SNDPRG:	SETZ
	LSHC 6
	JUMPE PRGSPC
	ADDI "A-'A
	PUSHJ 17,TXTOCH
PRGSPC:	JUMPN 1,SNDPRG
	JSP 1,TXTSTR
	 ASCIZ/@SAIL]
/
	PUSHJ 17,TXTSND
	OUTSTR [ASCIZ/Go ahead:
/]
; FALLS THROUGH
;ZZZ MAINLP

SUBTTL TOP LEVEL

ZZZ:	IWAIT
MAINLP:	INCHRS
	 JRST [	PUSHJ 17,TXTICH
		 JRST [	SKIPE NETOP
			 PUSHJ 17,TXTSND
			JRST ZZZ]
		CAIN 176		; ~
		 MOVEI 32
		CAIN 175		; }
		 MOVEI 176
		CAIN ↑G
		 JRST [	HRROI -1
			BEEP
			JRST MAINLP]
		OUTCHR
		JRST MAINLP]
	TRZE 400
	 JRST [	CAIN 200\↑J
		 EXIT
		TRZ 40			; UGH BLETCH
		CAIE 200\"Q
		 CAIN "Q
		  EXIT
		CAIN 200\"L		; UGH!!!!
		 JRST [	MOVE [INCHRS]
			MOVEM MAINLP
			JRST MAINLP]
		CAIE "L
		 JRST MAINLP
		MOVE [INCHSL]
		MOVEM MAINLP
		JRST MAINLP]
	TRZE 200
	 ANDI 37			; ASCII CONTROLLIFY?
	CAIN ↑G
	 JRST [	HRROI 1,-1
		BEEP 1,
		JRST .+2]
	OUTCHR
	CAIN 176			; }
	 MOVEI 175
	CAIN 32				; ~
	 MOVEI 176
	PUSHJ 17,TXTOCH
	SETOM NETOP
	JRST MAINLP
;LOSER GETSC1 SC1DUN GTRHAN RHANDN GETSC2 SC2DUN GTSHAN SHANDN RHANLP RHALDN

SUBTTL LINK TO LOSERS

LOSER:	JSP 1,CMDSTR
	 ASCIZ/AUXS S 8
AUXS R 8
/
	PUSHJ 17,NETSND
	PUSHJ 17,RESPON
	SETZ 3,
GETSC1:	PUSHJ 17,NETICW
	SUBI "0
	JUMPL SC1DUN			; BLETCHEROUS CROCK DUE TO CRETIN NETWRK
	LSH 3,3
	ADD 3,
	JRST GETSC1
SC1DUN:	MOVEM 3,RSOC
	MOVE 3,[440700,,RHAN]		; THEIR SEND SOCKET'S HANDLE
GTRHAN:	PUSHJ 17,NETICW
	CAIN "+
	 JRST RHANDN
	IDPB 3
	JRST GTRHAN
RHANDN:	PUSHJ 17,RESPON
	SETZ 3,
GETSC2:	PUSHJ 17,NETICW
	SUBI "0
	JUMPL SC2DUN
	LSH 3,3
	ADD 3,
	JRST GETSC2
SC2DUN:	MOVEM 3,SSOC
	MOVE 3,[440700,,SHAN]		; THEIR RECEIVE SOCKET'S HANDLE
GTSHAN:	PUSHJ 17,NETICW
	CAIN "+
	 JRST SHANDN
	IDPB 3
	JRST GTSHAN
SHANDN:	PUSHJ 17,WAITGA
	JSP 1,CMDSTR
	 ASCIZ/CONN /
	MOVE 1,[440700,,RHAN]
RHANLP:	ILDB 1
	JUMPE RHALDN
	PUSHJ 17,NETOCH
	JRST RHANLP
RHALDN:	MOVEI <" >
	PUSHJ 17,NETOCH
	MOVE LSOCKT
	ADDI 4
	PUSHJ 17,OCTOUT
	JSP 1,CMDSTR
	 ASCIZ/
/
	PUSHJ 17,NETSND
	MOVE RSOC
	SUBI 3
	MOVEM FSOCKT			; FAKE OUT NETWRK
	PUSHJ 17,DATI
	CAIE 8.
	 JRST 4,.-1
	PUSHJ 17,RESPON
	PUSHJ 17,WAITGA
; FALLS THROUGH
;SHANLP SHALDN RHANL1 RHALD1 SHANL1 SHALD1 LNKIL1 LNKID1

; MORE FOR LOSERS

	JSP 1,CMDSTR
	 ASCIZ/CONN /
	MOVE 1,[440700,,SHAN]
SHANLP:	ILDB 1
	JUMPE SHALDN
	PUSHJ 17,NETOCH
	JRST SHANLP
SHALDN:	MOVEI <" >
	PUSHJ 17,NETOCH
	MOVE LSOCKT
	ADDI 5
	PUSHJ 17,OCTOUT
	JSP 1,CMDSTR
	 ASCIZ/
/
	PUSHJ 17,NETSND
	MOVE SSOC
	SUBI 2
	MOVEM FSOCKT			; FAKE OUT NETWRK
	MOVEI 8.
	PUSHJ 17,DATO
	CAIE 8.
	 JRST 4,.-1
	PUSHJ 17,RESPON
	PUSHJ 17,WAITGA
	JSP 1,CMDSTR
	 ASCIZ/LINK /
	MOVE 1,[440700,,RHAN]
RHANL1:	ILDB 1
	JUMPE RHALD1
	PUSHJ 17,NETOCH
	JRST RHANL1
RHALD1:	MOVEI <" >
	PUSHJ 17,NETOCH
	MOVE 1,[440700,,SHAN]
SHANL1:	ILDB 1
	JUMPE SHALD1
	PUSHJ 17,NETOCH
	JRST SHANL1
SHALD1:	MOVEI <" >
	PUSHJ 17,NETOCH
	MOVE 1,[440700,,USRBUF]
LNKIL1:	ILDB 1
	JUMPE LNKID1
	PUSHJ 17,NETOCH
	JRST LNKIL1
LNKID1:	JSP 1,CMDSTR
	 ASCIZ/
/
	PUSHJ 17,NETSND
; FALLS THROUGH
;BBNSUX SNDRUB SNTRUB

SUBTTL MARVELOUS CROCK, COURTESY OF BBN!

BBNSUX:	MOVEI 16			; GODDAM BAGBITING SAIL+TENEX!
	MTAPE DAT,
	JUMPN 7,SNDRUB
	PUSHJ 17,NETICH
	 CAIA
	  JRST [CAIN "+
		 JRST [	MOVEI 177
			PUSHJ 17,DATOCH
			PUSHJ 17,DATSND
			JRST SNTRUB]
		CAIN "-
		 JRST LOST
		JRST BBNSUX]		; BOY DO THEY EVER
	MOVEI 1
	SLEEP
	JRST BBNSUX			; LONG AND HARD

SNDRUB:	MOVEI 177			; CRETIN TENEX
	PUSHJ 17,DATOCH
	PUSHJ 17,DATSND
	PUSHJ 17,RESPON
SNTRUB:	PUSHJ 17,WAITGA
	JRST LNKMSG
;TXTSTR TXTOCH TXTSND TXTICH CMDSTR OCTOUT RESPON LOST GETMSG WAITGA

SUBTTL SUBROUTINES

TXTSTR:	HRLI 1,440700			; OUTPUT A COMMAND STRING
	ILDB 1
	JUMPE 1(1)
	PUSHJ 17,TXTOCH
	JRST TXTSTR+1

TXTOCH:	SKIPE ITSP
	 JRST NETOCH
	JRST DATOCH

TXTSND:	SKIPE ITSP
	 JRST NETSND
	JRST DATSND

TXTICH:	SKIPE ITSP
	 JRST NETICH
	JRST DATICH

CMDSTR:	HRLI 1,440700			; OUTPUT A COMMAND STRING
	ILDB 1
	JUMPE 1(1)
	PUSHJ 17,NETOCH
	JRST CMDSTR+1

OCTOUT:	IDIVI 10
	PUSH 17,1
	SKIPE
	 PUSHJ 17,OCTOUT
	POP 17,
	ADDI "0
	JRST NETOCH

RESPON:	PUSHJ 17,NETICW			; GET A RESPONSE
	CAIN "+
	 POPJ 17,
	CAIE "-
	 JRST RESPON
LOST:	PUSHJ 17,NETICW
	CAIE <" >
	 JRST LOST
GETMSG:	PUSHJ 17,NETICW
	OUTCHR
	CAIE ↑J
	 JRST GETMSG
	EXIT				; JUST CLOSE ON THE LOSER

WAITGA:	PUSHJ 17,NETICW			; WAIT FOR GA
	CAIE "@
	 JRST WAITGA
	POPJ 17,

END TALK